package cn.ljn.org.controller;

import cn.ljn.basic.annotation.PreAuthorize;
import cn.ljn.basic.util.AjaxResult;
import cn.ljn.basic.util.PageList;
import cn.ljn.org.domain.Employee;

import cn.ljn.org.query.EmployeeQuery;
import cn.ljn.org.service.EmployeeService;
import io.swagger.annotations.Api;

import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RequestMapping("/emp")
@RestController // @Controller + @ResponseBody
@Api(value = "员工的API",description="员工相关的CRUD功能")
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;

    /**
     * restful 风格 查询所有
     *
     * @return
     */
    @GetMapping
    public List<Employee> findAll() {
        return employeeService.findAll();
    }

    /**
     * 根据id查询一个
     * 如果我们接口只有一个参数的时候 我们可以使用 路径变量的形式去接收参数 多个参数的话使用实体去接收
     * 我们原来请求：http://localhost:8080/dept/findById?id=1
     * 路径变量：http://localhost:8080/dept/1
     */
    @GetMapping("/{id}")
    @ApiOperation(value = "通过ID查询" )
    public Employee findById(@ApiParam(value="ID属性",required = true)  @PathVariable("id") Long id) {
        return employeeService.findById(id);
    }

    /**
     * 添加/修改
     * 前后端分离之后 前后端交互数据全部都是json数据 本质是个字符串
     *
     * @RequestBody 来将json数据转成我们的实体 但是我们的参数中只能有一个实体 不能有多个
     */
    @PutMapping
    public AjaxResult addOrUpdate(@RequestBody Employee employee) {
        try {
            if (employee.getId() == null) {
                employeeService.add(employee);
            } else {
                employeeService.update(employee);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.me().fail();
        }
        return AjaxResult.me().success();
    }

    /**
     * 删除
     */
    @DeleteMapping("/{id}")
    public AjaxResult delete(@PathVariable("id") Long id) {
        employeeService.delete(id);
        return AjaxResult.me().success();
    }

    /**
     * 分页查询
     */
    @PostMapping
//    @PreAuthorize(name="查询员工列表", sn = "employee:queryByPage")
    public PageList<Employee> queryByPage(@RequestBody EmployeeQuery query) {
        return employeeService.queryByPage(query);
    }




    /**
     * 批量删除
     */
    @PatchMapping()
    public AjaxResult batchDelete(@RequestBody List<Long> ids){
        employeeService.batchDelete(ids);
        return AjaxResult.me().success();
    }

//    @GetMapping("/getEmployees/{id}")
//    public List<Employee> getEmpById(@PathVariable("id") Long id){
//        return employeeService.getEmpById(id);
//    }

    /**
     * 根据部门id查询员工列表数据
     */
    @GetMapping("/getEmployees/{id}")
    public List<Employee> findEmpByDeptId(@PathVariable("id") Long id) {
        return  employeeService.getEmployees(id);
    }


}
